﻿using System.Data.Entity.ModelConfiguration;

namespace Delphi.Mimir.Data.Entities.Final.Mappings {
    public class PortfolioMap : EntityTypeConfiguration<Portfolio> {
        public PortfolioMap() {
            /******************************************************************
            /* Table
            /*****************************************************************/
            ToTable("fin.pfm_portfolios");

            /******************************************************************
            /* Primary Key
            /*****************************************************************/
            HasKey(a => a.PortfolioId);

            /******************************************************************
            /* Index
            /*****************************************************************/
            // None

            /******************************************************************
            /* Relationships
            /*****************************************************************/
            // 1..n Client
            HasRequired<Client>(a => a.Client)
                .WithMany()
                .HasForeignKey(a => a.ClientId);

            // 1..n Accounts
            HasMany<Account>(a => a.Accounts)
                .WithRequired(a => a.Portfolio)
                .HasForeignKey(a => a.PortfolioId);

            // 1..n Currency
            HasRequired<Currency>(a => a.Currency)
                .WithMany()
                .HasForeignKey(a => a.CurrencyId)
                .WillCascadeOnDelete(false);

            /******************************************************************
            /* Properties
            /*****************************************************************/
            Property(a => a.PortfolioId)
                .IsRequired()
                .HasColumnName("prt_id");

            Property(a => a.ClientId)
                .IsRequired()
                .HasColumnName("prt_clt_id");

            Property(a => a.Name)
                .IsRequired()
                .IsUnicode(false)
                .HasMaxLength(250)
                .HasColumnName("prt_name");

            Ignore(a => a.Balance);

            Property(a => a.CurrencyId)
                .IsRequired()
                .HasColumnName("prt_cur_id");
        }
    }
}
